跳到主要内容

Go 调用 MongoDB 的命令

mongod \                                                                                                            
--dbpath /var/lib/mongo \
--logpath /var/log/mongodb/mongod.log \
--fork

方案一:使用原生的命令

func main() {
client := util.GetMgoCli()
db := client.Database("my_db")
RunCommand(db)
}

func RunCommand(db *mongo.Database) {
// {"collation": {} }
// commandStr := `{"jobName":"test_job"}`
commandStr := `{ "find": "my_collection", "filter": {"jobName": "test_job"} }`
var command interface{}
err := bson.UnmarshalExtJSON([]byte(commandStr), true, &command)
if err != nil {
log.Fatal(err)
}

var result bson.M
err = db.RunCommand(context.TODO(), command).Decode(&result)
if err != nil {
log.Fatal(err)
}

log.Println(result)
}

这个命令参考: https://www.mongodb.com/docs/manual/reference/command/

方案二:使用原生的 Shell

使用 https://www.mongodb.com/docs/mongodb-shell/

mongosh mongodb://localhost:27017/my_db --quiet --eval 'db.my_collection.findOne({"jobName": "test_job"})'

在 Go 里面直接使用

func main() {
var outb, errb bytes.Buffer
cmd := exec.Command("mongosh", "mongodb://localhost:27017/my_db", "--quiet", "--eval", `'db.my_collection.findOne({"jobName": "test_job"})'`)
cmd.Stdout = &outb
cmd.Stderr = &errb
err := cmd.Run()
if err != nil {
log.Fatal(err)
}
// fmt.Println("out:", outb.String(), "err:", errb.String())
fmt.Printlin(outb.String())
}

References